package com.sky.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.lang.annotation.Retention;

@Configuration
@Slf4j
public class RedisConfiguration {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象");
        RedisTemplate redisTemplate =new RedisTemplate();
        //设置redis 的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis 可以的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}
//package com.sky.config;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Primary;
//import org.springframework.data.redis.connection.RedisConnectionFactory;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
//import org.springframework.data.redis.serializer.StringRedisSerializer;
//
//@Configuration
//@Slf4j
//public class RedisConfiguration {
//
//    /**
//     * 保留并明确指定一个默认的 RedisTemplate，这对于依赖默认配置的框架（如 Spring Security）很重要。
//     * 使用 @Primary 注解确保它被优先注入。
//     */
//    @Primary
//    @Bean
//    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//        log.info("开始创建默认的 RedisTemplate 对象");
//        RedisTemplate<String, Object> template = new RedisTemplate<>();
//        template.setConnectionFactory(redisConnectionFactory);
//
//        // 使用 Jackson2JsonRedisSerializer 来序列化和反序列化 redis 的 value 值
//        GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer();
//
//        // 值采用json序列化
//        template.setValueSerializer(serializer);
//        // 使用StringRedisSerializer来序列化和反序列化redis的key值
//        template.setKeySerializer(new StringRedisSerializer());
//
//        template.setHashKeySerializer(new StringRedisSerializer());
//        template.setHashValueSerializer(serializer);
//
//        template.afterPropertiesSet();
//        return template;
//    }
//
//    /**
//     * （可选）为你的业务逻辑创建一个专门的命名 Bean，避免与默认的混淆。
//     * 在你的 ShopController 中，可以通过 @Qualifier("businessRedisTemplate") 来注入它。
//     * 不过，对于你当前的代码，使用上面那个默认的 template 也完全可以。
//     */
//    /*
//    @Bean
//    public RedisTemplate<String, Object> businessRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
//        log.info("开始创建业务专用的 RedisTemplate 对象");
//        // 配置与上面类似，可以根据业务需求定制
//        RedisTemplate<String, Object> template = new RedisTemplate<>();
//        template.setConnectionFactory(redisConnectionFactory);
//        // ... 其他配置 ...
//        return template;
//    }
//    */
//}
